/*
 * @Description:
 * @Author: huacong
 * @Date: 2020-01-15 18:18:47
 * @LastEditTime: 2020-06-29 19:09:35
 * @LastEditors: huacong
 */

const path = require("path");
const Uglifyjs = require("terser-webpack-plugin");
const webpack = require('webpack')
const FileManagerPlugin = require('filemanager-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 有人文件的方法
function resolve (dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  filenameHashing: true,
  // 部署应用包时的baseURL,用法和 webpack 本身的 output.publicPath 一致
  publicPath: process.env.NODE_ENV !== "development" ? "./" : "/",
  // 输出文件目录
  outputDir: "dist",
  // 放置生成的静态资源（js,css,img,fonts）的（相对于outputDir的）目录
  assetsDir: "static",
  // 指定生成的index.html的输出路径（相对于outputDir的）
  // indexPath: "./",
  // eslint-loader 是否在保存的时候检查
  // lintOnSave: true,
  lintOnSave: false,
  devServer: {
    overlay: {
        warning: false,
        errors: false
    }
  },
  // 是否使用包含运行时编译器的 Vue 构建版本
  runtimeCompiler: false,
  // 生产环境是否生成 sourceMap 文件
  productionSourceMap: false,
  // 生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)
  integrity: false,
  // webpack相关配置
  chainWebpack: (config) => {
    // console.log(config, 666);
    // 配置的别名
    config.resolve.alias
      .set("vue$", "vue/dist/vue.esm.js")
      // .set("@", path.resolve(__dirname, "./src"));
      .set("@", resolve("src"))
      .set("router", resolve("src/router"))
      .set("components", resolve("src/components"))
      .set("@img", resolve("src/assets"))
      .set("@less", resolve("src/assets/common"));
      config.plugin('provide').use(webpack.ProvidePlugin, [{
        $: 'jquery',
        jquery: 'jquery',
        jQuery: 'jquery',
        'window.jQuery': 'jquery'
      }])
    // 生成环境
    if (process.env.NODE_ENV !== "development") {
      // 删除预加载
      config.plugins.delete("preload");
      config.plugins.delete("prefetch");
      // 压缩代码开启
      // config.optimization.minimiza:true;
      // 分割代码
      config.optimization.splitChunks({
        chunks: "all",
      });
      // 注入CDN
    }
    config.resolve.symlinks(true);
  },
  configureWebpack: (config) => {
    let HtmlWebpackPlugins=new HtmlWebpackPlugin({
      filename: 'first.html',
      template: 'public/first.html',
      inject: true,
    }) 
    config.plugins.push(HtmlWebpackPlugins)
    if (process.env.VUE_APP_ENV !== "development") {      
      // ElementUI不打包，使用cdn服务
      // Object.assign(config, {
      //   externals: {
      //     "element-ui": "ElementUI",
      //   },
      // });
      let fileManagerPlugin =new FileManagerPlugin({
        onEnd: {
          archive: [
            { source: 'dist', destination: 'assistant-h5.zip' },
          ]
        }
      })         
      config.plugins.push(fileManagerPlugin)
      config.plugins.push(
        // 生成环境自动删除console
        new Uglifyjs({
          terserOptions: {
            compress: {
              drop_debugger: true, // console
              drop_console: true,
            },
          },
          // 是否生成sourceMap
          sourceMap: false,
          // 使用多进程并行运行提高构建速度
          parallel: true,
        })        
      );      
    }
  },
  // 启用并行化，默认并发运行数为os.cpus().length>1，并显著加速构建
  parallel: require("os").cpus().length > 1,
  // PWA 插件相关配置
  pwa: {},
  // webpack-dev-server 相关配置
  devServer: {
    compress: false, // 开启压缩
    // open: true,   自动开启游览器
    host: "0.0.0.0",
    port: 8080,
    https: false,
    hotOnly: false,
    // http 代理配置
    proxy: {
      "/api": {
        target: "http://openapi.devch.qiaofangcloud.cn/channel-openapi", // 后台服务器
        // ws:true,  websocket与后台开启的持续通道
        changeOrigin: true, // 是否允许跨域
        pathRewrite: {
          // 重写
          "^/api": "/api",
        },
      },
    },
  },
  // },
};
